package com.szh.htmltopdf.controller;

import com.szh.common.resp.Resp;
import com.szh.htmltopdf.model.UserModel;
import com.szh.htmltopdf.pojo.UserVO;
import com.szh.htmltopdf.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;

@RequestMapping("/user")
@RestController
@Slf4j
public class UserController {

    @Resource
    UserService userService;
    @Resource
    RedissonClient redissonClient;
    @GetMapping("/lombok")
    public List<UserModel> testLombok(){
        List<UserModel> list = userService.list();
       return list;
    }

    /**
     * 测试 mybatis 下 使用Lombok @Data +@Builder 出现 问题、
     * 公司 项目中用的是 lombok 1.18.18
     * 我用的是：1.18.22 并没有出现这个问题 
     */
    @GetMapping("/lombok2")
    public Resp<List<UserVO>> testLombok2(){
        List<UserVO> list = userService.testLombok();
        return Resp.ok(list);
    }

    /** 测试 分布式锁，下，事务提交的时机
     * @return 
     */
    @GetMapping("/tran")
    public String testRedissonLockAndTran(){

        RLock lock = redissonClient.getLock("11111");
        lock.lock();
        String i = null;
        try {
            userService.testRedissonLockAndTran();

        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException( "充值失败，请重试");
        } finally {
            lock.unlock();
        }
        
        return "ok" ;
    }

    /** 测试 分布式锁，下，手动事务
     * @return
     */
    @GetMapping("/ManualTran")
    public String testRedissonLockAndManualTran(){

        return   userService.testRedissonLockAndManualTran();
        
    }

}
